package com.ruoyi.management.dao.mapper;

import com.ruoyi.management.pojo.entity.*;
import com.ruoyi.management.pojo.param.AmmeterParam;
import com.ruoyi.management.pojo.param.KtParam1;
import com.ruoyi.management.pojo.po.*;
import com.ruoyi.management.pojo.vo.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.security.core.parameters.P;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;

@Mapper
public interface BillingMapper {
    //通过用户编号和电表编号查询所有租用明细表
    List<QldbzymxPO> selectQldbzymx(KhbhDbbh kd);
    //通过电表编号查询当月月度表数据
    MouthReadPO selectMouthRead(@Param("dbbh") String dbbh);
    //通过电表编号查询上月月度表数据
    MouthReadPO selectMouthRead1(@Param("dbbh") String dbbh);
    //查询所有的khbh和dbbh
    List<KhbhDbbh> selectQldbzymx1(@Param("selectTime") Date selectTime,@Param("qymc") String qymc);
    //查询电表单价
    BigDecimal selectDbdjByDbbh(String dbbh);
    //通过时间和khbh查询符合条件的电表编号
    List<KhbhDbbh> selectQldbzymx2(@Param("khbh") String khbh,@Param("mouth") Date mouth);
    //通过载体查询载体下的开户行等信息
    ZtPo selectck(@Param("zt") String zt);
    //查询所有符合条件载体
    List<ZTVO> selectzt(Integer yxa);
    //查询年度数据
    MouthReadPO selectYearRead(String dbbh);
    //切换电表计费状态
    Boolean ammeterZyStatus(QLdbzymxVO qLdbzymxVO);
    //单电费
    List<DbdfVO> selectMeterFeeList(@Param("zt") String zt, @Param("date") Date lastDate);
    //单电费+核查联
    List<DbdfVO> selectMeterFeeListCheck(@Param("zt") String zt, @Param("date")Date lastDate);
    //查单电表所有数据
    List<DbdfVO> confirmMeterFee(@Param("date") Date date,@Param("zt") String zt,@Param("tgszt") String[] tgszt);
    //查单电表+核查所有数据
    List<DbdfVO> confirmMeterFeeCheck(@Param("date") Date date,@Param("zt") String zt,@Param("tgszt") String[] tgszt);
    //插入月度表
    Boolean insert(QldbydbmxVO record);
    //查询所有确认数据
    List<QldbydbmxVO> selectconfirmMeterFee(@Param("zt") String zt,@Param("date") Date date);
    //查单项目月度电量
    List<Dbydzt> selectydztk(@Param("zt") String zt,@Param("date") Date date);

    List<Dbydzt> selectydzt(@Param("zt") String zt,@Param("date") Date date);
    //插入月度载体
    Boolean insertydzt(QldbydyzPO record);
    //租户电费
    List<Dbydydfvckkh> selectydkh(@Param("zt") String zt,@Param("date") Date date);
    //租户电费+核查联
    List<Dbydydfvckkh> selectydkhc(@Param("zt") String zt,@Param("date") Date date);
    //插入租户账单表
    Boolean insertkh(Qldbykhmx record);

    BigDecimal selectWszjeByZtAndKhbh(@Param("zt") String zt,@Param("khbh") String khbh);

    BigDecimal selectHkzjeByZtAndKhbh(@Param("zt") String zt,@Param("khbh") String khbh);

    Boolean updatekh(QldbqyinfoPO qldbqyinfoPO);

    List<Qldbykhmx> selectExistingRecord(@Param("zt") String zt, @Param("khbh") String khbh, @Param("yf") Integer yf,@Param("nf") Integer nf,@Param("hklx") String hklx);

    List<Qldbykhmx> confirmZhFee(@Param("zt") String zt,@Param("date") Date date);

    List<QldbydbmxVO> selectQldbydbmx(@Param("zt") String zt,@Param("dbbh") String dbbh,@Param("yf") Integer yf,@Param("nf") Integer nf,@Param("yxa") Integer yxa);

    List<QldbydyzPO> selectQldbydbzt(@Param("zt") String zt,@Param("yf") Integer yf,@Param("nf") Integer nf);

    List<ZTVO> selectzt1(@Param("tgszt") String[] values,@Param("date") Date date);

    List<YearVO> selectDailyReadsByDbbhAndMonth(@Param("dbbh") String dbbh, @Param("month") String month);

    List<Qldbykhmx> selectBillingList(@Param("date") Date date,@Param("qymc") String qymc,@Param("tgszt") String[] values,@Param("hkzt") String hkzt,@Param("hklx") String hklx);

    List<Qldbykhmx> selectBillingList1(@Param("qymc") String qymc,@Param("tgszt") String[] values,@Param("hkzt") String hkzt);

    List<ZTVO> selectzt2(Date date);
    //月度应收看板
    DbkhhkyVO monthReceivable(@Param("date") Date date,@Param("tgszt") String[] values,@Param("zt") String zt);
    //月度拖欠看板
    DbkhhkyVO yearDelay(@Param("date") Integer date, @Param("tgszt") String[] values,@Param("zt") String zt);
    //月度应收明细
    List<Qldbykhmx> monthReceivablemx(@Param("date") Date date,@Param("tgszt") String[] values,@Param("zt") String zt, @Param("qymc") String qymc);
    //年度拖欠明细
    List<Qldbykhmx> yearDelaymx(@Param("tgszt") String[] values,@Param("zt") String zt);
    List<Qldbykhmx> yearDelaymx1(@Param("date") Integer date,@Param("tgszt") String[] values,@Param("zt") String zt);
    //月度已收看板
    DbkhhkyVO received(@Param("date") Date date,@Param("tgszt") String[] values,@Param("zt") String zt);
    //月度已收明细
    List<QldbysjmxVO> receivedmx(@Param("tgszt") String[] values,@Param("date") Date date,@Param("zt") String zt, @Param("qymc") String qymc);
    //已开票明细
    List<QldbysjmxVO> Invoiced(@Param("tgszt") String[] values,@Param("date") Date date,@Param("zt") String zt);

    DbkhhkyVO unInvoiced(@Param("date") Integer date,@Param("tgszt") String[] values,@Param("zt") String zt);

    List<QldbysjmxVO> unInvoicedmx(@Param("date") Integer date,@Param("tgszt") String[] values,@Param("zt") String zt);
    //客户整体电费数据
    DbkhhsjbVO customer(@Param("khbh") String khbh,@Param("zt") String zt);
    //客户未收明细
    List<Qldbykhmx> customerMx(@Param("zt") String zt,@Param("khbh") String khbh);

    List<QldbysjmxVO> customerReceived(@Param("zt") String zt,@Param("khbh") String khbh);
    //客户开票列表
    List<Qldbykp> customerInvoiced(@Param("zt") String zt,@Param("khbh") String khbh);
    //通过房间号去查房源表里的信息
    Qldbykp selectxx(@Param("a") String a,@Param("zt") String zt);
    //查询空调费用
    List<Dbydydfvckkh> selectydkhkt(@Param("zt") String zt,@Param("date") Date date);
    //将空调费用插入底表
    Boolean insertQldbakt(Qldbakt qldbakt);
    //空调费看板
    AirConditioningParam airConditioningMatch(@Param("date") Date date,@Param("zt") String zt);
    //空调费列表明细
    List<Qldbakt> airConditioningList(@Param("date") Date date,@Param("zt") String zt);
    //获取房间关联的租户信息
    Qldbakt selectkt(@Param("room") String room,@Param("zt") String zt);
    //批量插入空调数据
    int batchInsertQldbkt(@Param("list") List<KtParam1> insertList);
    //批量查询
    List<Qldbakt> selectKtByRooms(@Param("roomNumbers") List<String> roomNumbers,
                                  @Param("zt") String zt);

    //查询指定房间指定月份的记录
    List<KtParam1> selectRecordsByRoomAndMonth(@Param("room") String roomNumber,@Param("date") Date date,@Param("zt") String zt);
    //批量插入计算后的数据
    int batchInsertQldbktCalculated(List<Qldbakt> calculatedInsertList);
    // 新增交给供电局的电费
    Boolean powerSupplyBureau(@Param("zt") String zt,@Param("date1") Date date1,@Param("wjzjea") BigDecimal wjzjea);
    //通过id查询应收记录
    List<Qldbykhmx> payment(@Param("numbers") int[] numbers);

    QldbqyinfoPO selectQldbqyinfo(@Param("zt") String zt,@Param("khbh") String khbh);
    //新增已收明细表记录qldbysjmx
    Boolean insertQldbysjmx(QldbysjmxVO f1);
    //更新应收表qldbykhmx
    Boolean updateQldbykhmx(Qldbykhmx q1);
    //更新客户数据总表qldbqyinfo
    Boolean updateQldbqyinfo(QldbqyinfoPO q3);
    //查询所有预付费客户未收款和部分收款
    List<Qldbykhmx> prepaid();
    //查询客户余额
    BigDecimal getcsyje(String khbh);
    //新增缴费表记录
    Boolean insertQldbjfmx(Qldbjfmx qldbjfmx);
    //插入新增的id
    Boolean insertQldbyczmx(String idsStr);
    //查询预付费和后付费流水
    List<Qldbyczmx> paymentRecord2(@Param("khbh") String khbh,@Param("zt") String zt,@Param("jflx") Integer jflx,@Param("fylx") String fylx, @Param("date") Date date,@Param("qymc") String qymc);
    //查询租户每月已收明细
    List<QldbysjmxVO> tenantysmx(@Param("khbh") String khbh,@Param("zt") String zt);

    List<RechargeRecord> tenantysmx1(@Param("qymc") String qymc,@Param("zt") String zt);

    List<QldbysjmxVO> tenantysmx11(@Param("qymc") String qymc,@Param("zt") String zt,@Param("date") Date date,@Param("tgszt") String[] values);

    List<QldbysjmxVO> tenantysmxje(@Param("qymc") String qymc,@Param("zt") String zt,@Param("date") Date date,@Param("tgszt") String[] values);

    List<Dbysdba> tenantqfysmx(@Param("qymc") String qymc,@Param("zt") String zt,@Param("tgszt") String[] values,@Param("status") Integer status);

    List<DbdfVO> confirmMeterFeeAll();

    List<Dbydzt> selectydztAll();

    List<Dbydydfvckkh> selectydkhAll();

    List<Qldbzt> selectydztkAll();

    List<Dbysdba1t> selectdba1tAll();

    List<String> selectSj(@Param("khbh") String khbh,@Param("zt") String zt);

    List<Dbysdba1t> selectdba1tRAll();

    List<Qldbzt> selectQldbzt(@Param("zt") String zt,@Param("lb") Integer lb);

    String selectOpenid(@Param("khbh") String khbh,@Param("zt") String zt);
}
